package pack_text;

//思路与推箱子类似

import com.sun.javafx.collections.MappingChange.Map;

class F {
	//活动域，1为墙，0为空地
	public static int area[][] = { { 1, 1, 1, 1, 1 }, { 1, 0, 0, 0, 1 }, { 1, 0, 0, 0, 1 }, { 1, 0, 0, 0, 1 },
			{ 1, 1, 1, 1, 1 } };

	// 位置
	public int x = 0;
	public int y = 0;

	// 名称，同时表示物体的强弱，，4，3，2，渐弱
	public int num;

	

	
	
	public int getX() {
		return x;
	}

	public int getY() {
		return y;
	}

	/*
	移动，分上下左右
	随机数产生1、2、3、4。分别表示上下左右
	
	不碰墙
		前方为空地
			移动至空地，原位置置零
		前方为动物
			吃掉别人，原位置置零
			被别人吃，原位置置零
	碰墙
		递归调用，直至不碰墙
	
	
	
	
	*/
	public void move(F f) {
		int k = (int) (Math.random() * (4 - 1) + 1);
		if (k == 1) {
			// 向上走没碰墙
			if (area[f.getX() - 1][f.getY()] != 1) {
				if (area[f.getX() + 1][f.getY()] == 0) {	//前方为空地
					area[f.getX()][f.getY()] = 0; // 原位置置零
					f.x -= 1;						//移动后位置
					area[f.getX()][f.getY()] = f.num;		
				} else if (area[f.getX()][f.getY()] < area[f.getX() - 1][f.getY()]) {	
					area[f.getX()][f.getY()] = 0; // 原位置置零 移动后被吃
				} else if (area[f.getX()][f.getY()] > area[f.getX() - 1][f.getY()]) {
					area[f.getX()][f.getY()] = 0;		//原位置置零 移动吃掉别人
					f.x -= 1;
					area[f.getX()][f.getY()] = f.num;
				}

			} else
				this.move(f);		//碰到墙，递归，直至不碰墙

		} else if (k == 2) {
			if (area[f.getX() + 1][f.getY()] != 1) {

				if (area[f.getX() - 1][f.getY()] == 0) {

					area[f.getX()][f.getY()] = 0; // 原位置置零
					f.x += 1;
					area[f.getX()][f.getY()] = f.num;
				} else if (area[f.getX()][f.getY()] < area[f.getX() + 1][f.getY()]) {
					area[f.getX()][f.getY()] = 0; // 原位置置零 移动后被吃
				} else if (area[f.getX()][f.getY()] > area[f.getX() + 1][f.getY()]) {
					area[f.getX()][f.getY()] = 0; // 吃掉别人
					f.x += 1;
					area[f.getX()][f.getY()] = f.num;
				}
			} else
				this.move(f);
		} else if (k == 3) {
			if (area[f.getX()][f.getY() - 1] != 1) {
				if (area[f.getX()][f.getY() - 1] == 0) {

					area[f.getX()][f.getY()] = 0; // 原位置置零
					f.y -= 1;
					area[f.getX()][f.getY()] = f.num;
				} else if (area[f.getX()][f.getY()] < area[f.getX()][f.getY() - 1]) {
					area[f.getX()][f.getY()] = 0; // 原位置置零 移动后被吃
				} else if (area[f.getX()][f.getY()] > area[f.getX()][f.getY() - 1]) {
					area[f.getX()][f.getY()] = 0; // 原位置置零 移动吃掉别人
					f.y -= 1;
					area[f.getX()][f.getY()] = f.num;
				}
			} else
				this.move(f);
		} else if (k == 4) {
			if (area[f.getX()][f.getY() + 1] != 1) {

				if (area[f.getX()][f.getY() + 1] == 0) {

					area[f.getX()][f.getY()] = 0; // 原位置置零
					f.y += 1;
					area[f.getX()][f.getY()] = f.num;
				} else if (area[f.getX()][f.getY()] < area[f.getX()][f.getY() + 1]) {
					area[f.getX()][f.getY()] = 0; // 原位置置零 移动后被吃
				} else if (area[f.getX()][f.getY()] < area[f.getX()][f.getY() + 1]) {
					area[f.getX()][f.getY()] = 0; // 原位置置零 移动吃掉别人
					f.y += 1;
					area[f.getX()][f.getY()] = f.num;
				}
			} else
				this.move(f);
		}
	}
}

//数字1表示该物体
class A extends F {

	public A(int x, int y) {
		this.x = x;
		this.y = y;
		this.num = 2;
		this.area[x][y] = num;
	}

}

//数字2而表示该物体
class B extends F {
	public B(int x, int y) {
		this.x = x;
		this.y = y;
		this.num = 3;
		this.area[x][y] = num;
	}
}

//数字3而表示该物体
class C extends F {
	public C(int x, int y) {
		this.x = x;
		this.y = y;
		this.num = 4;
		this.area[x][y] = num;
	}
}

public class Text {

	// 该方法检验是否存在3和2，都不存在，就结束了
	public static boolean method(F f) {
		boolean flag = false;
		for (int i = 0; i < f.area.length; i++) {
			for (int j = 0; j < f.area.length; j++) {
				if (f.area[i][j] == 3 || f.area[i][j] == 2) {
					flag = true;
					break;
				}
			}
		}

		return flag;
	}

	public static void main(String[] args) {
		F f = new F();
		A a = new A(1, 1); // 起始位置
		B b = new B(1, 3);
		C c = new C(3, 3);

		//起始位置，打印
		System.out.println("初始");
		for (int i = 0; i < f.area.length; i++) {
			for (int j = 0; j < f.area.length; j++) {
				System.out.print(f.area[i][j] + " ");
			}
			System.out.println();
		}
		System.out.println("\n\n\n\n");

		// 开始移动
		while (true) {
			//每个对象都移动，
			f.move(a);
			System.out.println("A动");
			for (int i = 0; i < f.area.length; i++) {
				for (int j = 0; j < f.area.length; j++) {
					System.out.print(f.area[i][j] + " ");
				}
				System.out.println();
			}
			System.out.println("\n\n\n\n");

			f.move(b);
			System.out.println("B动");
			for (int i = 0; i < f.area.length; i++) {
				for (int j = 0; j < f.area.length; j++) {
					System.out.print(f.area[i][j] + " ");
				}
				System.out.println();
			}
			System.out.println("\n\n\n\n");

			f.move(c);
			System.out.println("C动");
			for (int i = 0; i < f.area.length; i++) {
				for (int j = 0; j < f.area.length; j++) {
					System.out.print(f.area[i][j] + " ");
				}
				System.out.println();
			}
			System.out.println("\n\n\n\n");

			// 只有最强的4就退出
			if (!method(f)) {
				System.out.println("over");
				break;
			}
		}
	}
}
